home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / ISSUE09 / SAFELIST / LISTEXP.PAS < prev    next >
Pascal/Delphi Source File  |  1996-02-26  |  3KB  |  155 lines

  1. unit Listexp;
  2.  
  3. {Code for an expert that generates type-safe lists.
  4.  Accompanies the article proposal for 'The Delphi Magazine' on type-safe lists.
  5.  Copyright Jim Cooper 1996.
  6.  This code is freeware and may be used, copied and modified to your
  7.  heart's content.}
  8.  
  9. interface
  10.  
  11. uses
  12.   SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  13.   Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, ExptIntf;
  14.  
  15. type
  16.   TListExpertDlg = class(TForm)
  17.     Label1: TLabel;
  18.     ItemEdit: TEdit;
  19.     Bevel1: TBevel;
  20.     GenerateBtn: TBitBtn;
  21.     Label2: TLabel;
  22.     ListEdit: TEdit;
  23.     CodeMemo: TMemo;
  24.     CloseBtn: TBitBtn;
  25.     SkeletonMemo: TMemo;
  26.     Label3: TLabel;
  27.     Label4: TLabel;
  28.     procedure GenerateBtnClick(Sender: TObject);
  29.   private
  30.     procedure GenerateCode;
  31.   end;
  32.  
  33.  
  34.   TListExpert = class(TIExpert)
  35.   public
  36.     function GetName: string; override;
  37.     function GetComment: string; override;
  38.     function GetGlyph: HBITMAP; override;
  39.     function GetStyle: TExpertStyle; override;
  40.     function GetState: TExpertState; override;
  41.     function GetIDString: string; override;
  42.     function GetMenuText: string; override;
  43.     procedure Execute; override;
  44.   end;
  45.  
  46.  
  47.   procedure Register;
  48.  
  49.  
  50. implementation
  51.  
  52. {$R *.DFM}
  53.  
  54. const
  55.   ListNameToken = '{TListName}';
  56.   ItemNameToken = '{TItemName}';
  57.  
  58. procedure TListExpertDlg.GenerateCode;
  59.   var
  60.     i    : Longint;
  61.     Line : string;
  62.  
  63.   procedure ReplaceToken(const Token,Replacement : string);
  64.     var
  65.       s : Integer;
  66.   begin {ReplaceToken}
  67.     s := Pos(Token,Line);
  68.  
  69.     while s > 0 do begin
  70.       Delete(Line,s,Length(Token));
  71.       Insert(Replacement,Line,s);
  72.       s := Pos(Token,Line);
  73.     end;
  74.   end;  {ReplaceToken}
  75.  
  76. begin {Replace}
  77.   CodeMemo.Lines.Clear;
  78.  
  79.   for i := 0 to SkeletonMemo.Lines.Count - 1 do begin
  80.     Line := SkeletonMemo.Lines[i];
  81.     ReplaceToken(ListNameToken,ListEdit.Text);
  82.     ReplaceToken(ItemNameToken,ItemEdit.Text);
  83.     CodeMemo.Lines.Add(Line);
  84.   end;
  85. end;  {Replace}
  86.  
  87.  
  88. procedure TListExpertDlg.GenerateBtnClick(Sender: TObject);
  89. begin
  90.   GenerateCode;
  91. end;
  92.  
  93.  
  94. {----------------------- TListExpert implementation ----------------------}
  95.  
  96. function TListExpert.GetName : string;
  97. begin {GetName}
  98.   Result := 'Type-safe List Expert';
  99. end;  {GetName}
  100.  
  101.  
  102. function TListExpert.GetComment : string;
  103. begin {GetComment}
  104.   Result := '';  {Not needed for esStandard experts}
  105. end;  {GetComment}
  106.  
  107.  
  108. function TListExpert.GetGlyph : HBITMAP;
  109. begin {GetGlyph}
  110.   Result := 0;   {Not needed for esStandard experts}
  111. end;  {GetGlyph}
  112.  
  113.  
  114. function TListExpert.GetStyle : TExpertStyle;
  115. begin {GetStyle}
  116.   Result := esStandard;
  117. end;  {GetStyle}
  118.  
  119.  
  120. function TListExpert.GetState : TExpertState;
  121. begin {GetState}
  122.   Result := [esEnabled];
  123. end;  {GetState}
  124.  
  125.  
  126. function TListExpert.GetIDString : string;
  127. begin {GetIDString}
  128.   Result := 'JimCooper.TypesafeListExpert';
  129. end;  {GetIDString}
  130.  
  131.  
  132. function TListExpert.GetMenuText : string;
  133. begin {GetMenuText}
  134.   Result := 'Type-safe List Expert...';
  135. end;  {GetMenuText}
  136.  
  137.  
  138. procedure TListExpert.Execute;
  139.   var
  140.     ListExpertDlg : TListExpertDlg;
  141. begin {Execute}
  142.   ListExpertDlg := TListExpertDlg.Create(Application);
  143.   ListExpertDlg.ShowModal;
  144.   ListExpertDlg.Free;
  145. end;  {Execute}
  146.  
  147.  
  148. procedure Register;
  149. begin {Register}
  150.   RegisterLibraryExpert(TListExpert.Create);
  151. end;  {Register}
  152.  
  153.  
  154. end.
  155.